#ifndef _OS_INTERFACE_H_
#define _OS_INTERFACE_H_

#include <stdint.h>
#include <stddef.h>

/*
 * 系统调用相关接口
 */

// 创建一个进程/线程
typedef void (*os_main_func)(void* arg);
typedef struct
{
    char* name;
    os_main_func func;
    void* arg;
} os_task_attr_t;

extern int os_task_create(os_task_attr_t* attr);

// 销毁一个进程/线程
extern void os_task_destroy(int task_id);

// 读写操作系统设备
extern int os_read_device(int device_id, void* buffer, uint32_t size);
extern int os_write_device(int device_id, const void* buffer, uint32_t size);

// 对操作系统所请求的资源进行加锁/解锁
extern int os_lock_resource(int resource_id);
extern int os_unlock_resource(int resource_id);

// 其他系统调用相关接口

/*
 * 硬件驱动相关接口
 */

// 打开操作系统的驱动程序
extern int os_driver_open(int driver_id);

// 关闭操作系统的驱动程序
extern void os_driver_close(int driver_id);

// 读写操作系统驱动
extern int os_driver_read(int driver_id, void* buffer, uint32_t size);
extern int os_driver_write(int driver_id, const void* buffer, uint32_t size);

// 对硬件设备进行控制
extern int os_control_device(int device_id, uint32_t cmd, void* data);

// 其他硬件驱动相关接口

/*
 * 任务管理相关接口
 */

// 启动任务调度
extern void os_scheduler_start(void);

// 停止任务调度
extern void os_scheduler_stop(void);

// 重启任务调度
extern void os_scheduler_restart(void);

// 请求进入临界区
extern void os_enter_critical(void);

// 退出临界区
extern void os_exit_critical(void);

// 其他任务管理相关接口

/*
 * 信号管理相关接口
 */

// 等待一个信号
extern int os_wait_signal(int signal_id);

// 发送一个信号
extern int os_send_signal(int signal_id);

// 其他信号管理相关接口

/*
 * 内存分配相关接口
 */

// 动态分配内存
extern void* os_malloc(size_t size);

// 释放内存
extern void os_free(void* ptr);

// 其他内存分配相关接口

#endif  // _OS_INTERFACE_H_